#ifndef STREAM_MANAGER_H
#define STREAM_MANAGER_H

#include <string>
#include <memory>
#include <atomic>
#include <thread>
#include "Logger.h"
#include "Config.h"

// SDP信息结构体
struct SdpInfo {
    std::string remote_ip;    // 对端IP
    int remote_port;          // 对端端口
    std::string ssrc;         // SSRC标识
    std::string transport;    // 传输类型 "TCP" 或 "UDP"
    std::string setup;        // 连接模式 "active" 或 "passive"
};

class StreamManager {
private:
    static StreamManager* instance;
    std::atomic<bool> streaming;
    std::thread stream_thread;
    SdpInfo current_sdp;
    
    // 执行推流的线程函数
    void streamingThreadFunc();
    
    // 私有构造函数，避免外部创建实例
    StreamManager();
    
public:
    ~StreamManager();
    
    // 单例模式获取实例
    static StreamManager& getInstance();
    
    // 解析SDP
    SdpInfo parseSdp(const std::string& sdp);
    
    // 解析SDP并设置推流参数
    bool parseSdpAndSetParams(const std::string& sdp);
    
    // 生成SDP应答 (两个版本)
    std::string generateSdpAnswer(const SdpInfo& sdp_info);
    std::string generateSdpAnswer();
    
    // 开始推流 (两个版本)
    bool startStreaming(const SdpInfo& sdp_info);
    bool startStreaming();
    
    // 停止推流
    void stopStreaming();
    
    // 是否正在推流
    bool isStreaming() const { return streaming; }
    
    // 测试SDP解析
    void testSdpParsing(const std::string& sdp);
};

#endif // STREAM_MANAGER_H 